package leetcode_core.leetcode_5;

/**
 * 功能描述
 *
 * @author: 张庭杰
 * @date: 2023年01月05日 21:26
 */
public class IsValidSudoku {
    public boolean isValidSudoku(char[][] board) {
        //这道题可以用哈希表来做
        //有九行,每一行可能会有9个数
        int[][] row = new int[9][9];
        //有九列,每一列可能会有9个数
        int[][] col = new int[9][9];
        //有九个格子,每一个格子可能会有9个数
        int[][][] area = new int[3][3][9];
        //初始情况下每个都是0
        for(int i = 0;i<9;i++){
            for(int j = 0;j<9;j++){
                char c = board[i][j];
                if(c == '.'){continue;}
                int u = c-'0';
                //首先检查同一行是否有同一个数
                if(row[i][u-1] == 1){
                    return false;
                }
                //检查同一列是否有同一个数
                if(col[j][u-1] == 1){
                    return false;
                }
                //检查同一个格子是否有同一个数
                if(area[i/3][j/3][u-1] == 1){
                    return false;
                }
                row[i][u-1] = 1;
                col[j][u-1] = 1;
                area[i/3][j/3][u-1]=1;
            }
        }
        return true;
    }
}
